<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>深入理解 Netty 的 Pipeline 和 Handler 链</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            position: relative;
            overflow: hidden;
        }
        
        .hero-gradient::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
        }
        
        .content-card {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease;
        }
        
        .content-card:hover {
            transform: translateY(-2px);
            box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
        }
        
        .section-title {
            position: relative;
            padding-left: 20px;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 24px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 2px;
        }
        
        .code-block {
            background: #1e1e1e;
            color: #d4d4d4;
            border-radius: 12px;
            overflow: hidden;
            position: relative;
        }
        
        .code-block::before {
            content: 'Java';
            position: absolute;
            top: 10px;
            right: 15px;
            font-size: 12px;
            color: #666;
            text-transform: uppercase;
            letter-spacing: 1px;
        }
        
        .feature-card {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            border: 1px solid rgba(255, 255, 255, 0.8);
            transition: all 0.3s ease;
        }
        
        .feature-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
        }
        
        .mermaid {
            background: white;
            padding: 20px;
            border-radius: 12px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }
        
        .highlight-text {
            background: linear-gradient(120deg, #f093fb 0%, #f5576c 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-weight: 700;
        }
        
        .list-item::before {
            content: '▸';
            color: #667eea;
            font-weight: bold;
            margin-right: 10px;
        }
        
        @keyframes float {
            0% { transform: translateY(0px); }
            50% { transform: translateY(-10px); }
            100% { transform: translateY(0px); }
        }
        
        .floating {
            animation: float 3s ease-in-out infinite;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <div class="hero-gradient text-white py-20 px-6">
        <div class="max-w-6xl mx-auto text-center">
            <div class="floating">
                <i class="fas fa-network-wired text-6xl mb-6 opacity-80"></i>
            </div>
            <h1 class="text-5xl md:text-6xl font-bold mb-6">
                深入理解 Netty 的 <span class="highlight-text">Pipeline</span> 和 <span class="highlight-text">Handler 链</span>
            </h1>
            <p class="text-xl md:text-2xl opacity-90 max-w-3xl mx-auto leading-relaxed">
                探索 Netty 架构中的核心概念，掌握高性能网络通信的关键技术
            </p>
        </div>
    </div>

    <!-- Main Content -->
    <div class="max-w-6xl mx-auto px-6 py-12">
        <!-- Introduction -->
        <div class="content-card rounded-2xl p-8 mb-8">
            <p class="text-lg leading-relaxed text-gray-700 indent-8">
                Netty是一个非常强大的网络通信框架，它的设计非常灵活，其中<strong class="text-purple-600">Pipeline</strong>和<strong class="text-purple-600">Handler链</strong>是Netty架构中的核心概念。它们不仅是Netty高效能的关键所在，也是理解Netty工作原理和优化网络通信的基础。
            </p>
        </div>

        <!-- What is Pipeline -->
        <div class="content-card rounded-2xl p-8 mb-8">
            <h2 class="section-title text-3xl font-bold mb-6 text-gray-800">
                <i class="fas fa-layer-group mr-3 text-purple-600"></i>什么是Pipeline？
            </h2>
            <p class="text-lg leading-relaxed text-gray-700 mb-6 indent-8">
                <strong class="text-purple-600">Pipeline</strong>（管道）是Netty中处理网络事件流的核心机制，它是由一系列<strong class="text-purple-600">Handler</strong>组成的链条。每当一个事件发生时，它会被依次传递给Pipeline中的每一个Handler进行处理。Pipeline的设计使得数据处理过程非常灵活和高效，可以根据需要增加、删除、调整处理步骤，从而实现高度的可扩展性和可维护性。在Netty中，Pipeline是一个<strong class="text-purple-600">责任链模式</strong>的实现。每个Handler都是链中的一个处理节点，事件通过这个链传递和处理。
            </p>
            
            <h3 class="text-2xl font-semibold mb-4 text-gray-800">
                <i class="fas fa-cogs mr-2 text-purple-500"></i>Pipeline的核心作用
            </h3>
            <div class="grid md:grid-cols-3 gap-4">
                <div class="feature-card p-6 rounded-xl">
                    <i class="fas fa-exchange-alt text-3xl text-purple-600 mb-3"></i>
                    <h4 class="font-semibold text-lg mb-2">事件传递</h4>
                    <p class="text-gray-600">Pipeline负责将一个事件（比如数据读取、连接建立等）传递给链条中的每个Handler处理。</p>
                </div>
                <div class="feature-card p-6 rounded-xl">
                    <i class="fas fa-tasks text-3xl text-purple-600 mb-3"></i>
                    <h4 class="font-semibold text-lg mb-2">处理责任分配</h4>
                    <p class="text-gray-600">每个Handler负责特定的处理逻辑，例如数据解码、业务处理、数据编码等。</p>
                </div>
                <div class="feature-card p-6 rounded-xl">
                    <i class="fas fa-puzzle-piece text-3xl text-purple-600 mb-3"></i>
                    <h4 class="font-semibold text-lg mb-2">灵活扩展</h4>
                    <p class="text-gray-600">通过修改Pipeline的配置，我们可以灵活地控制数据处理的流程、添加新的功能或者调整现有的处理逻辑。</p>
                </div>
            </div>
        </div>

        <!-- What is Handler Chain -->
        <div class="content-card rounded-2xl p-8 mb-8">
            <h2 class="section-title text-3xl font-bold mb-6 text-gray-800">
                <i class="fas fa-link mr-3 text-purple-600"></i>什么是Handler链？
            </h2>
            <p class="text-lg leading-relaxed text-gray-700 mb-6 indent-8">
                <strong class="text-purple-600">Handler链</strong>（Handler Chain）是Pipeline的组成部分，是一系列处理网络事件的Handler对象。每个Handler负责处理Pipeline中的一个特定环节，可以是数据的解码、编码、业务逻辑处理、异常处理等。
            </p>
            <p class="text-lg leading-relaxed text-gray-700 mb-6">
                Handler链的工作方式非常类似于Java的<strong class="text-purple-600">责任链模式</strong>，每个Handler有可能会修改传递的消息或者事件，或者将消息转发给链中的下一个Handler。Handler链的顺序是非常重要的，它决定了事件的处理流程。
            </p>

            <div class="grid md:grid-cols-2 gap-6 mb-6">
                <div class="bg-gradient-to-r from-blue-50 to-purple-50 p-6 rounded-xl">
                    <h3 class="text-xl font-semibold mb-3 text-gray-800">
                        <i class="fas fa-arrow-down mr-2 text-blue-600"></i>Handler的类型
                    </h3>
                    <div class="space-y-3">
                        <div class="bg-white p-4 rounded-lg shadow-sm">
                            <h4 class="font-semibold text-purple-600 mb-1">Inbound Handler（入站处理器）</h4>
                            <p class="text-gray-600">负责处理从远程对端接收到的数据或事件。例如：数据解码、读取事件处理等。</p>
                        </div>
                        <div class="bg-white p-4 rounded-lg shadow-sm">
                            <h4 class="font-semibold text-purple-600 mb-1">Outbound Handler（出站处理器）</h4>
                            <p class="text-gray-600">负责处理发送到远程对端的数据或事件。例如：数据编码、写操作等。</p>
                        </div>
                    </div>
                </div>

                <div class="bg-gradient-to-r from-purple-50 to-pink-50 p-6 rounded-xl">
                    <h3 class="text-xl font-semibold mb-3 text-gray-800">
                        <i class="fas fa-tools mr-2 text-purple-600"></i>Handler的作用
                    </h3>
                    <ul class="space-y-2 text-gray-700">
                        <li class="list-item">读取/处理数据：处理从客户端或服务器接收到的数据</li>
                        <li class="list-item">写入/发送数据：将数据写入到网络连接中发送到对端</li>
                        <li class="list-item">解码/编码数据：数据格式转换</li>
                        <li class="list-item">异常处理：捕获并处理网络通信异常</li>
                        <li class="list-item">连接管理：处理连接的建立、关闭等事件</li>
                    </ul>
                </div>
            </div>
        </div>

        <!-- Pipeline Working Principle -->
        <div class="content-card rounded-2xl p-8 mb-8">
            <h2 class="section-title text-3xl font-bold mb-6 text-gray-800">
                <i class="fas fa-project-diagram mr-3 text-purple-600"></i>Pipeline的工作原理
            </h2>
            <p class="text-lg leading-relaxed text-gray-700 mb-6 indent-8">
                在Netty中，事件的处理过程是通过<strong class="text-purple-600">ChannelPipeline</strong>来管理的。每当事件发生时，它会进入Pipeline，Pipeline会按照配置好的顺序将事件传递给其中的Handler进行处理。
            </p>

            <!-- Mermaid Diagram -->
            <div class="mb-8">
                <div class="mermaid">
                    graph LR
                        A[网络事件发生